binary_c provides stellar evolution through a heavily-modified and updated C version of the BSE library, or through its own N-dimensional interpolation, structure, evolution and nuclear-burning library, MINT, which uses, for example, pre-computed MESA data. Stellar evolution includes wind mass loss, rotation, thermal pulses, magnetic braking, pre-main sequence evolution, supernovae and kicks, neutron stars and black holes, and stellar colours corresponding to almost any system using a native interpolation of the YBC datasets.
Binary-star evolution includes mass transfer, the latest mass-transfer stability algorithms, rejuvenation, gravitational-wave losses, tides, common-envelope evolution, novae, circumbinary discs and merging stars. The MINT library provides 'off-grid' stars that are only made in binaries. binary_c can also follow planetary or asteroid orbits around single or binary stars.
binary_c is the only stellar-population code that natively includes nucleosynthesis. Stars make almost all the heavy elements in the Universe, and binary_c will tell you how. Explosions are included such as supernovae and novae, as is more stable burning such as pp, CNO, NeNa and MgAl chains. The effects of being in a binary system, such as accretion of chemically polluted material from a companion star to form a CH, CEMP or barium star, are standard features. More than 400 isotopes can be used, including radioactive sources such as 26Al, and the yield sets are designed for use with Galactic Chemical Evolution codes.
binary_c, using binary_c-python, quickly generates stellar populations of millions of stars suitable for comparison with data from, e.g., Gaia or SDSS. Millions of stars means billions or trillions of data associated with each stellar population. These data are combined into stellar-population ensembles internally use the very-fast, native C, libcdict to save their data in an arbitrarily-nested, N-dimensional dataset which can be saved as JSON files ready to be imported into Python or R in just one line of code.
binary_c is designed to be fast and flexible. There are several options for time integration, such as explicit forward-Euler, RK2 and RK4, and an implicit predictor-corrector. Nuclear burning is provided through small, hence fast, optimized networks using Kaps-Rentrop solvers. Time evolution is split into integration of smooth derivatives, such as wind-mass loss rates or tidal spin up, and events which are treated as instantaneous, such as supernoave and common-envelope ejection. The timestepping algorithm can be tuned by the user to suit their needs.
binary_c is both fast and has high coding standards. All its code is stored on Gitlab and is open source. Functions are often outsourced to optimized libraries such as libcdict, librinterpolate and libmemoize whenever possible. The source code uses features such as X-macros to aid readability and simplify algorithms, procedures and standards. binary_c also has standard sets of unit tests and compiler tests, as well as a Monte-carlo test suite, which mean that each release is thoroughly evaluated.
An Applcation Programming Interface (API) comes as standard with binary_c, allowing it to be incorporated in your project whether it uses C, C++, Python, Perl, FORTRAN or any other modern programming language. The API has been stable for some years now, and natively handles issues such as data caching and tabular interpolation efficently. Binary_c builds a shared library which can be used in Linux or OSX by any other application.
binary_c is designed to work as quickly as possible in a single-thread, single-CPU environment. However, through binary_c-python, you can run as many threads on as many CPUs as you like. binary_c scales extremely well in this situation and is perfect for any modern CPU architecture. There is native support for both HTCondor and Slurm distributed computing grids, or you can run multi-threaded jobs on your desktop.
Binary_c is continuously developed. For example, the MINT library, developed by Giovanni Mirouh, is an interpolation library desgined to replace analytic fitting formulae and hence evolve stars self-consistently. Natalie Rees is making grids of post-helium ignition stellar models for MINT. David Hendriks is using binary_c to investigate pair-instability supernovae and their contribution to black-hole mergers, while Arman Aryaeipour is improving our understanding of thermonuclear novae with details MESA models. binary_c also has a triple-star module, written by Tom Comerford for his STFC-funded PhD, which will provide the perfect basis for investigating both triple and quadruple stellar systems.